package main

import (
	"fmt"
	"github.com/jinzhu/gorm"
	_ "github.com/jinzhu/gorm/dialects/mysql"
)

//type Aaa struct {
//	Id    int
//	A1    string
//	A2    string
//	BbbId int // Bbb 表的外键，名字规则必须是管理的表面B然后驼峰明明跟上id，就会自动关联上外键了
//	Bbb   Bbb // 这里属性的名称 必须和 下面的 Preload() 函数内填入的一样，不然无法映射到对应关系
//}

type Aaa struct {
	Id    int
	A1    string
	A2    string
	XxxId int // 这里的属性名称如果不叫 BbbId ，没有匹配上外键，可以使用下面的配置指定字段，但是数据库的字段必须有这个字段 xxx_id 作为关联关系
	Bbb   Bbb `gorm:"foreignkey:XxxId"`
}

type Bbb struct {
	Id int
	B1 string
	B2 string
}

func main() {
	db, err := gorm.Open("mysql", "root:123456@(127.0.0.1:3306)/db1?charset=utf8&parseTime=True&loc=Local")
	if err != nil {
		panic(err)
	}
	defer db.Close()

	// 自动创建表  自动迁移 （把结构体和数据表进行映射）
	db.AutoMigrate(&Aaa{})
	db.AutoMigrate(&Bbb{})

	//插入测试数据，查询使用
	//bbb := Bbb{
	//	Id: 1,
	//	B1: "B1",
	//	B2: "B2",
	//}
	//bbb2 := Bbb{
	//	Id: 2,
	//	B1: "B1",
	//	B2: "B2",
	//}
	//aaa := Aaa{
	//	Id:    1,
	//	A1:    "A1",
	//	A2:    "A2",
	//	XxxId: 1,
	//}
	//aaa2 := Aaa{
	//	Id:    2,
	//	A1:    "A1",
	//	A2:    "A2",
	//	XxxId: 2,
	//}
	//
	//db.Create(aaa)
	//db.Create(aaa2)
	//db.Create(bbb)
	//db.Create(bbb2)

	var arr []Aaa

	db.Preload("Bbb").Find(&arr)

	fmt.Println(arr)
}
